When a guest computer system is emulated on a host computer system, the guest computer system is called a “virtual machine” as the guest computer system only exists in the host computer system as a software representation of the operation of one specific hardware configuration that may diverge from the native machine. The virtual machine presents to the software operating on the virtual machine an emulated hardware configuration.
A virtual machine management system (sometimes referred to as a virtual machine monitor, virtualization system, or a hypervisor) is also often employed to manage one or more virtual machines so that multiple virtual machines can run on a single computing device concurrently. The virtual machine management system runs directly on the native hardware and virtualizes the resources of the machine by exposing interfaces to virtual machines for access to the underlying hardware. A host operating system (OS) and a virtual machine management system may run side-by-side on the same physical hardware. For purposes of clarity will we use the term virtualization system to refer to all incarnations of a virtual machine management system.
One problem that occurs in the operating system virtualization context relates to computing resources such as data storage devices, data input and output devices, networking devices and the like, which we refer to collectively as input/output (I/O). Existing virtualization solutions tend to handle physical redundancy of I/O by managing that redundancy in the virtualization system, away from the guest operating system, and presenting a virtualized, single I/O channel (network interface, storage host bus adapter, etc.) to the virtual machine. This limits the ability of the OS and application within the virtual machine to provide useful hints regarding how to effectively manage multiple path scenarios.